import json
import random
import time

import requests
import hashlib

#{"errorCode":0,"translateResult":[[{"tgt":"hello","src":"你好"}]],"type":"zh-CHS2en"}服务端返回的接口数据
#https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule 接口地址

#客户端向服务端传递的数据：
# i: 你好
# from: AUTO
# to: AUTO
# smartresult: dict
# client: fanyideskweb
# salt: 16639397310455
# sign: 89fbc401a0517e018b4d1724ac5f0f2c
# lts: 1663939731045
# bv: 47edca4d7e6ec9bf4fca7156ea36b8ef
# doctype: json
# version: 2.1

#salt，sign，lts不同   查看页面JSON代码，研究加密算法
#js位置： 源代码->YOUDAO_SELECTOR_IFRAME->fanyi.youdao.com->index索引->shared.ydstatic.com->fanyi->newweb/v1.1.10->scripts/newweb/fanyi.min.js

#sign: n.md5("fanyideskweb" + e + i + "Ygy_4c=r#e#4EX^NUGUc5")
#  e :就是输入的关键字
#  i ：i = r + parseInt(10 * Math.random(), 10)   获取到0-9之间的随机数
#  r : r = "" + (new Date).getTime()   获取到一个时间戳（获取到现在的时间距离1970年1月1日的毫秒数）
#所以sign的算法就是sign: n.md5("fanyideskweb"    + 关键字 + 时间戳 +  0-9之间的随机数     +     "Ygy_4c=r#e#4EX^NUGUc5")

#salt：
#所以salt的算法是：salt: i,时间戳 + 0-9之间的随机数

#lts：
#  lts: i.ts,i = r(t)，ts: r,所以lts就是时间戳

# /**
#  *           _.._        ,------------.
#  *        ,'      `.    ( We want you! )
#  *       /  __) __` \    `-,----------'
#  *      (  (`-`(-')  ) _.-'
#  *      /)  \  = /  (
#  *     /'    |--' .  \
#  *    (  ,---|  `-.)__`
#  *     )(  `-.,--'   _`-.
#  *    '/,'          (  Uu",
#  *     (_       ,    `/,-' )
#  *     `.__,  : `-'/  /`--'
#  *       |     `--'  |
#  *       `   `-._   /
#  *        \        (
#  *        /\ .      \.  freebuf
#  *       / |` \     ,-\
#  *      /  \| .)   /   \
#  *     ( ,'|\    ,'     :
#  *     | \,`.`--"/      }
#  *     `,'    \  |,'    /
#  *    / "-._   `-/      |
#  *    "-.   "-.,'|     ;
#  *   /        _/["---'""]
#  *  :        /  |"-     '
#  *  '           |      /
#  *              `      |
#  */

if __name__=="__main__":
    while True:
        e = input("请输入你要翻译的关键字：")
        #如果e=q,就退出
        if e=="q":
            break
        #为什么乘1000：在JS中时间戳的单位是毫秒，而在py中单位是秒，为了同步JS
        lts = str(time.time()*1000) #变为字符串
        salt = lts + str(random.randint(0,10))
        sign = hashlib.md5(("fanyideskweb"+e+salt+"Ygy_4c=r#e#4EX^NUGUc5").encode()).hexdigest()# .encode() ： 变成一个字节流  .hexdigest()：调用这个方法才可以用md5加密


        header={
            "User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36",
            "Cookie" :"OUTFOX_SEARCH_USER_ID_NCOO=2079391733.8231735; OUTFOX_SEARCH_USER_ID=658477671@10.108.162.138; ___rl__test__cookies=1663942773783",
            "Referer":"https://fanyi.youdao.com/"
        }
        data = {
            "i": e,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            "lts": lts,
            "bv" : "47edca4d7e6ec9bf4fca7156ea36b8ef",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }
        res_data = requests.post("https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule",
                      headers=header,data=data)

        #print(res_data.text)
        #转换为一个字典，在字典中获取我们想要的东西
        res_dic = json.loads(res_data.text)
        print(res_dic["translateResult"][0][0]["tgt"])  #字典中获取translateResult  ，二维数组 [0][0]["tgt"]，二维数组中获取tgt





